package com.example.clientsideapplication;

import java.util.Calendar;
import java.sql.Date;
import android.app.Activity;
import android.app.DatePickerDialog;
import android.app.Dialog;
import android.content.Context;
import android.content.Intent;
import android.view.View;
import android.os.Bundle;
import android.widget.DatePicker;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.TextView;
import android.widget.Toast;

public class InsertOfferActivity extends Activity {

	private TextView productNameTW, productPriceTW, productInfoTW, startDataTW, endDataTW;
	private RadioButton checkedRadioButton;
	private RadioGroup radioGroup;
	private int currentDay, currentMonth, currentYear;
	private int startDay, startMonth, startYear;
	private int endDay, endMonth, endYear;
	private Date currentDate, startDate, endDate;
	private String serverAddress;
	private int serverSocket;

	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.insert_offer);

		Intent intent = getIntent();
		serverAddress = intent.getStringExtra("serverAddress");
		serverSocket = intent.getIntExtra("serverSocket", 21111);

		initDate();
	}

	public void onClickInsertOffer(View view) {

		productNameTW = (TextView) findViewById(R.id.insert_product_name_edit_text);
		productPriceTW = (TextView) findViewById(R.id.insert_product_price_edit_text);
		productInfoTW = (TextView) findViewById(R.id.insert_product_info_edit_text);
		radioGroup = (RadioGroup) findViewById(R.id.insert_offer_radio_group);
		checkedRadioButton = (RadioButton) findViewById(radioGroup
				.getCheckedRadioButtonId());
		
		// Date inizia il conteggio degli anni da 1900 e quello dei mesi da 0, quindi devo sottrarre 1900 agli anni
		// e 1 ai mesi, per ottenere la data corretta.
		startDate = new Date(startYear - 1900, startMonth - 1, startDay);
		endDate = new Date(endYear - 1900, endMonth - 1, endDay);
		currentDate = new Date(currentYear - 1900, currentMonth - 1, currentDay);

		Context context = getApplicationContext();
		int duration = Toast.LENGTH_LONG;
		if (productNameTW.getText().toString().length() == 0) {
			Toast toast = Toast
					.makeText(
							context,
							"Campo \"Nome Prodotto\" vuoto, inserire un nome per il prodotto.",
							duration);
			toast.show();
			productNameTW.requestFocus();
		} else if (productPriceTW.getText().toString().length() == 0) {
			Toast toast = Toast
					.makeText(
							context,
							"Campo \"Prezzo Prodotto\" vuoto, inserire un prezzo per il prodotto.",
							duration);
			toast.show();
			productPriceTW.requestFocus();
		} else if (productInfoTW.getText().toString().length() == 0) {
			Toast toast = Toast
					.makeText(
							context,
							"Campo \"Info Prodotto\" vuoto, inserire delle info per il prodotto.",
							duration);
			toast.show();
			productInfoTW.requestFocus();
		} else if (endDate.compareTo(startDate) < 0) {
			Toast toast = Toast
					.makeText(
							context,
							"La data di fine offerta deve essere successiva alla data di inizio offerta indicata, modificare le date.",
							duration);
			toast.show();
		} else if (startDate.compareTo(currentDate) < 0) {
			Toast toast = Toast
					.makeText(
							context,
							"La data di inizio offerta non deve essere precedente alla data odierna, modificare la data di inizio.",
							duration);
			toast.show();
		} else {

			// Date inizia il conteggio degli anni da 1900 e quello dei mesi da 0, quindi devo sottrarre 1900 agli anni
			// e 1 ai mesi, per ottenere la data corretta.
			Date startDateForDB = new Date(startYear - 1900, startMonth - 1, startDay);
			Date endDateForDB = new Date(endYear - 1900, endMonth - 1, endDay);

			Offer offer = new Offer(checkedRadioButton.getText().toString(),
					productNameTW.getText().toString(), productInfoTW.getText()
							.toString(), startDateForDB, endDateForDB,
					Double.parseDouble(productPriceTW.getText().toString()));
			Intent intent = new Intent(this, InsertOfferService.class);
			intent.putExtra("offer", offer);
			intent.putExtra("serverAddress", serverAddress);
			intent.putExtra("serverSocket", serverSocket);
			startService(intent);
			
			Toast toast = Toast
					.makeText(
							context,
							"Inserimento effettuato con successo.",
							duration);
			toast.show();
			
			finish();
		}

	}

	private void initDate() {
		startDataTW = (TextView) findViewById(R.id.insert_start_date);
		endDataTW = (TextView) findViewById(R.id.insert_end_date);
		
		// Il Calendar prende il mese precedente, probabilmente inizia a contare da 0, quindi sommo 1.
		Calendar calendar = Calendar.getInstance();
		currentDay = calendar.get(Calendar.DAY_OF_MONTH);
		currentMonth = calendar.get(Calendar.MONTH) + 1;
		currentYear = calendar.get(Calendar.YEAR);

		startDay = currentDay;
		startMonth = currentMonth;
		startYear = currentYear;		

		// Setto la data di fine offerta al giorno successivo rispetto alla data odierna.
		endDay = currentDay + 1;
		endMonth = currentMonth;
		endYear = currentYear;

		startUpdate();
		endUpdate();
		startDataTW.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				showDialog(0);
			}
		});
		endDataTW.setOnClickListener(new View.OnClickListener() {
			public void onClick(View v) {
				showDialog(1);
			}
		});
	}

	protected Dialog onCreateDialog(int id) {
		if (id == 0) {
			return new DatePickerDialog(this, startListener, startYear, startMonth - 1, startDay);
		} else {
			return new DatePickerDialog(this, endListener, endYear, endMonth - 1, endDay);
		}
	}

	protected DatePickerDialog.OnDateSetListener startListener = new DatePickerDialog.OnDateSetListener() {
		public void onDateSet(DatePicker dataPicker, int year, int month,
				int day) {
			// Il DataPicker prende il mese precedente, probabilmente inizia a contare da 0, quindi sommo 1.
			startDay = day;
			startMonth = month + 1;
			startYear = year;
			startUpdate();
		}
	};

	protected void startUpdate() {
		startDataTW = (TextView) findViewById(R.id.insert_start_date);

		startDataTW.setText(new StringBuilder().append(startDay).append("-")
				.append(startMonth).append("-").append(startYear)
				.append(" "));
	}

	protected DatePickerDialog.OnDateSetListener endListener = new DatePickerDialog.OnDateSetListener() {
		public void onDateSet(DatePicker dataPicker, int year, int month,
				int day) {
			// Il DataPicker prende il mese precedente, probabilmente inizia a contare da 0, quindi sommo 1.
			endDay = day;
			endMonth = month + 1;
			endYear = year;
			endUpdate();
		}
	};

	protected void endUpdate() {
		endDataTW = (TextView) findViewById(R.id.insert_end_date);
		endDataTW.setText(new StringBuilder().append(endDay).append("-")
				.append(endMonth).append("-").append(endYear).append(" "));
	}

}